#ifndef SEMANTICO_H_
#define SEMANTICO_H_
#include"NoArvore.h"
#include"NoHash.h"
#include"HashIdentificadores.h"
#include"VariavelSimples.h"
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Semantico
{
public:
	Semantico(NoArvore & , HashIdentificadores &);
	void ProcuraExpressao(NoArvore *);
	// analisa compatibilidade de operadores

	bool IsIdentificador(int, string );
	bool IsNumero(int );
	void VariavelSimples(NoHash *);
	bool AnalisaNoHash(NoHash *);
	void Expressao(NoArvore *);
	void Atribuicao(NoArvore *);
	void AnalisaNumero();
	void ExpreRetBool(NoArvore *);
	void AnalisaProcedimento(NoArvore *);
	virtual ~Semantico();
	
	

private:
	NoArvore *mArvoreSintatica;
	HashIdentificadores *mHashVariaveis;
	// representa o tipo da variavel na EXPRESSAO
	// AS VARIAVEIS DEVEM SER DO MESMO TIPO 
	// 1 = INTEGER , 2 = BOOLEAN
	int mTipoCorrente;
	int mRetorno; // valor do retorno
	int mExRetorno;
	bool mIsExpressao; // flag para barrar procedimento dentro de expressao
	NoHash *mNoCompara;
	int cont; // contador
};

#endif /*SEMANTICO_H_*/
